package com.spring.demo7.factory;

import org.springframework.context.annotation.ScopedProxyMode;
import org.springframework.core.annotation.AliasFor;

import java.lang.annotation.*;

/**
 * Scope:指定bean的作用域
 * <p>
 * 常见用法：
 * 1.和@Component一起用在类上
 * 2.和@Bean一起用在方法上
 */
@Documented
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
public @interface MyScope {
    // 指定作用域（如singleton,prototype）
    @AliasFor("scopeName")
    String value() default "";

    @AliasFor("value")
    String scopeName() default "";

    // 当@Scope中proxyMode为TARGET_CLASS的时候，会给当前创建的bean通过cglib生成一个代理对象，通过这个代理对象来访问目标bean对象
    ScopedProxyMode proxyMode() default ScopedProxyMode.DEFAULT;
}
